我正在做一些javascript3D处理,我有大量的对象(比如对象A),每个对象都包含一些东西和一组正整数,例如[0,1,4],[1,5,74,1013]等。它们不需要有私有(private)值,所有对象都可以共享同一个列表。这些数字可以从0到几千,比如65k(短)。分析显示这些数组占用了大量内存。在计算时,我的程序达到了超过2GB的分配内存,这不是愚蠢的预优化。我有2个内存优化线索:找到一种更节省内存的方式来存储这些列表(也许是大数位数组?)想办法避免重复。例如,我碰巧发现一些数组(如[0,1,2,3,4,5,6])存在于超过40000个对象A中。也许将这些数组存储在树结构中并制作我
我目前正在使用GoogleO3DWebGL框架开发应用程序,这是我第一次如此密集地使用JavaScript。这些功能只完成了大约20%,但应用程序本身已经开始占用大约160兆内存,而让应用程序运行时,它在Chrome中每秒消耗大约200kb,在FF中每秒消耗2meg;随着屏幕的刷新。在我写这篇文章时,我让Chrome9保持运行状态,它的内存使用量刚刚达到400兆。我现在特别在意FF的使用,我正在寻找任何关于优化JavaScript、防止内存泄漏以及任何能帮助我基本上解决这个问题的真正好的文档。我也非常感谢任何指向对我有帮助的很棒工具的链接。提前致谢。编辑:我遇到了Mozillaperf
我需要调用特定的js函数。问题是很多时候运行时情况可能会出现另一个js文件可能包含同名函数的情况。但我需要具体说明我应该调用哪个函数。函数重载不是我的解决方案。感谢和问候,坦美 最佳答案 您将不得不对资源进行一些重组,并尽可能使用命名空间。如果您有一个名为saySomething的方法被定义了两次,您可以将其中一个方法移动到一个对象(以更适合您的需要为准)。varmyNS=new(function(){this.saySomething=function(){alert('hello!');};})();另一个定义可以移到不同的对象
给定一些像这里这样的JS代码:for(vari=0;i如果我们在循环之前将getElementsByName的结果放入一个变量中,然后在循环之后使用该变量,代码会更快吗?我不确定在现实生活中影响有多大,getElementsByName的结果通常有另外,如果这两个选项还有什么值得注意的地方,请告诉我。 最佳答案 当然。存储所需的内存只是一个指向DOM对象的指针,与每次需要使用某些东西时进行DOM搜索相比,这显着不那么痛苦!理想代码:varscale_select=document.getElementsByName('scale_s
我知道这种形式:varfoo=functionbar(){};会将bar名称泄漏到封闭范围并在jscript中创建两个函数。怎么样:varfoo=functionfoo(){};?它仍然将名称泄漏到封闭范围,但无论如何它都在那里(thxtovarfoo)。我知道它将在整个范围内定义,但它会创建两个函数并立即取消引用/销毁其中一个,还是这仍然会导致泄漏?在这种情况下:varbar=function(){foo();varfoo=functionfoo(){};}bar()中是否有两个函数对象?编辑好的,它肯定创建了两个函数对象,现在的问题是:在varfoo行之后,由命名定义创建的函数是否
我试图编写一个存在内存泄漏的javascript代码,以便在Chrome中使用分析器。但是,探查器似乎没有显示它应该显示的内容。这是我的代码:StartDestroyvarLeaker=function(){};Leaker.prototype={init:function(){this._interval=null;this.start();},start:function(){varself=this;this._interval=setInterval(function(){self.onInterval();},100);},onInterval:function(){cons
我有一个UIWebView组件,它将加载一个可能包含JavaScript的网页。我想在加载的网页上运行任何JavaScript之前运行我自己的一些JavaScript。我知道我可以使用[myWebViewstringByEvaulatingJavaScriptFromString:]在webViewDidFinishLoad:上UIWebView代表,但是这只会在网页上的JavaScript运行后运行我的JavaScript。将我的JavaScript注入(inject)网页的源代码是唯一的解决方案吗?例如,我会把它紧跟在之后标记以确保它是第一个运行的JavaScript。
我有一个包含大量网格和MorphAnimMesh的大型场景。我想在删除网格时释放内存。如果我知道这是最好的方法:for(vari=scene.children.length-1;i>=0;i--){varobj=scene.children[i];scene.remove(obj);obj.deallocate();obj.geometry.deallocate();obj.material.deallocate();obj.material.map.deallocate();}如果我在此之后检查任务管理器中的内存使用情况,则没有任何变化。(试图等待GC几分钟但什么也没有。)谷歌Chr
在加载大量数据的Web应用程序中,当它超过特定限制时会崩溃。所以我想找到使用javascript的chrome选项卡使用的内存,即通过代码来防止此类问题。 最佳答案 这里来自sourcecodeofthechrome://Makethevaluesreturnedtowindow.performance.memorymoregranularandmoreuptodateinsharedworker.Withoutthisflag,thememoryinformationisstillavailable,butitisbucketiz
如何使用Qlibrary创建JavaScriptPromise的递归链?以下代码无法在Chrome中完成://Don'tkeeptrackofapromisesstackfordebugging//ReducesmemoryusagewhenrecursingpromisesQ.longStackJumpLimit=0;functiondo_stuff(count){if(count==1000000){return;}if(count%10000==0){console.log(count);}returnQ.delay(1).then(function(){returndo_stu